// package com.dms.common.interceptor;

// import com.dms.common.annotation.RequiresPermission;
// import com.dms.common.exception.BusinessException;
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.stereotype.Component;
// import org.springframework.web.method.HandlerMethod;
// import org.springframework.web.servlet.HandlerInterceptor;

// import javax.servlet.http.HttpServletRequest;
// import javax.servlet.http.HttpServletResponse;

// @Slf4j
// @Component
// public class PermissionInterceptor implements HandlerInterceptor {

//     @Autowired
//     private MerchantStaffService merchantStaffService;

//     @Autowired
//     private MerchantRolePermissionService rolePermissionService;

//     @Override
//     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//         if (!(handler instanceof HandlerMethod)) {
//             return true;
//         }

//         HandlerMethod handlerMethod = (HandlerMethod) handler;
//         RequiresPermission requiresPermission = handlerMethod.getMethodAnnotation(RequiresPermission.class);
        
//         if (requiresPermission == null) {
//             return true;
//         }

//         // 从请求或会话中获取当前用户ID和商家ID
//         Long userId = getCurrentUserId(request);
//         Long merchantId = getCurrentMerchantId(request);

//         if (userId == null) {
//             throw new BusinessException("用户未登录");
//         }

//         if (requiresPermission.requiresMerchant()) {
//             if (merchantId == null) {
//                 throw new BusinessException("商家ID不能为空");
//             }

//             // 检查用户是否是商家员工
//             if (!merchantStaffService.isStaff(merchantId, userId)) {
//                 throw new BusinessException("您不是该商家的员工");
//             }

//             // 获取员工角色
//             Long roleId = merchantStaffService.getStaffInfo(merchantId, userId).getRoleId();

//             // 检查角色是否有权限
//             if (!rolePermissionService.hasPermission(roleId, requiresPermission.value())) {
//                 throw new BusinessException("没有操作权限");
//             }
//         }

//         return true;
//     }

//     // TODO: 从实际的用户认证系统中获取用户ID
//     private Long getCurrentUserId(HttpServletRequest request) {
//         String userIdStr = request.getHeader("X-User-ID");
//         return userIdStr != null ? Long.parseLong(userIdStr) : null;
//     }

//     // TODO: 从实际的商家认证系统中获取商家ID
//     private Long getCurrentMerchantId(HttpServletRequest request) {
//         String merchantIdStr = request.getHeader("X-Merchant-ID");
//         return merchantIdStr != null ? Long.parseLong(merchantIdStr) : null;
//     }
// } 